{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "**通用最佳实践回顾**\n",
    "\n",
    "- `std::flat_map<Key, T>`（C++23 起）以内存连续的两段式结构存储排序键值对：一段保存键指针、另一段保存值。查找通过二分搜索实现 `O(log n)`，但插入/删除通常为 `O(n)`，因此特别适用于小到中等规模、读多写少的表。\n",
    "- 初始化时保持输入已排序或者使用构造函数自动排序；批量构建时，可先放入 `std::vector` 排序去重，再用范围构造一次性传入，以降低重排开销。\n",
    "- 由于底层连续存储，遍历时具备 cache 友好性；适合嵌入式、热路径查询以及需要在紧凑空间内存储配置、枚举映射等场景。\n",
    "- 插入会使迭代器失效（因底层容器可能重分配），对增量更新敏感；对于频繁写入或超大集合，应考虑 `std::map` / `std::unordered_map` 等替代。\n",
    "- `reserve` 可提前分配空间减少后续重分配；`nth_element` 等 STL 算法可直接作用在底层连续存储上（配合 `extract`/`replace_node` 特性不适用）。\n",
    "- 透明比较器（如 `std::less<>`）同样适用，支持异构查找；结合 `contains`、`find`、`lower_bound`、`upper_bound` 进行范围查询。\n",
    "- C++23 之前可选择 `boost::container::flat_map` 或自行封装 `std::vector` + 二分查找实现类似功能。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "| 序号 | 工程场景                        | 文件名                          | 说明要点                                                     | 可运行示例代码               |\n",
    "| ---- | ------------------------------- | ------------------------------- | ------------------------------------------------------------ | ---------------------------- |\n",
    "| 1    | 小/中规模读多写少：配置/常量表  | `flat_map_config_lookup.cpp`    | 一次性构建配置表；展示 `contains`、`at`、`lower_bound` 查询，强调读多写少特性 | 示例 1：配置表快速查找       |\n",
    "| 2    | 嵌入式/缓存敏感场景（连续存储） | `flat_map_sensors_embedded.cpp` | 连续存储利于缓存；通过 `reserve` 预分配，模拟嵌入式传感器 ID→校准参数查找 | 示例 2：嵌入式传感器映射查询 |\n",
    "| 3    | 启动期构建一次，运行期频繁查询  | `flat_map_error_codes.cpp`      | 启动期加载错误码映射；运行期通过 `find` 和异构查找快速返回描述；展示无需再构造临时字符串 | 示例 3：错误码表与异构查找   |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "- 示例 1：配置表快速查找（flat_map_config_lookup.cpp）\n",
    "- 示例 2：嵌入式传感器映射查询（flat_map_sensors_embedded.cpp）\n",
    "- 示例 3：错误码表与异构查找（flat_map_error_codes.cpp）"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++17",
   "language": "C++17",
   "name": "xcpp17"
  },
  "language_info": {
   "name": "C++17"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
